/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.cpd;
import java.util.Iterator;
import org.apache.commons.lang3.StringEscapeUtils;
import net.sourceforge.pmd.PMD;
public class CSVRenderer implements Renderer {
private char separator;
private boolean lineCountPerFile;
public static final char DEFAULT_SEPARATOR = ',';
public static final boolean DEFAULT_LINECOUNTPERFILE = false;
public CSVRenderer() {
this(DEFAULT_SEPARATOR, DEFAULT_LINECOUNTPERFILE);
}
public CSVRenderer(boolean lineCountPerFile) {
this(DEFAULT_SEPARATOR, lineCountPerFile);
}
public CSVRenderer(char separatorChar) {
this(separatorChar, DEFAULT_LINECOUNTPERFILE);
}
public CSVRenderer(char separatorChar, boolean lineCountPerFile) {
this.separator = separatorChar;
this.lineCountPerFile = lineCountPerFile;
}
@Override
public String render(Iterator<Match> matches) {
StringBuilder csv = new StringBuilder(1000);
if (!lineCountPerFile) {
csv.append("lines").append(separator);
}
csv.append("tokens").append(separator).append("occurrences").append(PMD.EOL);
while (matches.hasNext()) {
Match match = matches.next();
if (!lineCountPerFile) {
csv.append(match.getLineCount()).append(separator);
}
csv.append(match.getTokenCount()).append(separator).append(match.getMarkCount()).append(separator);
for (Iterator<Mark> marks = match.iterator(); marks.hasNext();) {
Mark mark = marks.next();
csv.append(mark.getBeginLine()).append(separator);
if (lineCountPerFile) {
csv.append(mark.getLineCount()).append(separator);
}
csv.append(StringEscapeUtils.escapeCsv(mark.getFilename()));
if (marks.hasNext()) {
csv.append(separator);
}
}
csv.append(PMD.EOL);
}
return csv.toString();
}
}